package com.dongdongshop.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.net.URL;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;

public class OSSUtil {
    private static Logger logger = LoggerFactory.getLogger(OSSUtil.class);

    public static String upload(MultipartFile image) throws IOException {
        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = "LTAI4G8zAa4LShzSP2zvukLt";
        String accessKeySecret = "M6HTIlA7QCtWvUxgyiNj0bUBYrRJ14";
        String bucketName = "dongdongshop-1904-ybb";
        String fileName = image.getOriginalFilename();
        logger.info("上传文件名为 : [[{}]]", fileName);
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 生成上传文件名
        String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String objectName = sdf.format(new Date()) + "/" + finalFileName;
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        if (ossClient.doesBucketExist(bucketName)) {
            logger.info("您已经创建Bucket：[[{}]].", bucketName);
        } else {
            logger.info("您的Bucket不存在，创建Bucket：[[{}]]。", bucketName);
            ossClient.createBucket(bucketName);
        }
        // 上传文件到阿里云OSS服务器
        ossClient.putObject(bucketName, objectName, image.getInputStream());
        logger.info("Object：[[{}]] 存入OSS成功。", objectName);
        //获取上传后的图片地址
        // 设置URL过期时间为1年  3600l* 1000*24*365。
        Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000 * 24 * 365);
        URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
        // 关闭OSSClient。
        ossClient.shutdown();
        String urlStr = url.toString();
        logger.info("上传后图片访问路径 : {}", urlStr);
        return urlStr;
    }
}
